/**
 * Created by Administrator on 2018/11/14.
 */
var me=true;
var over=false;
//重组棋盘，防止点击两次棋子变换
var chessBoard=[]
for (var i=0;i<15;i++){
    chessBoard[i]=[];
    for (var j=0;j<15;j++){
        chessBoard[i][j]=0;//没有落子
    }
}
//定义赢法数组
var wins=[];
//数组进行初始化
for (var i=0;i<15;i++){
    wins[i]=[];
    for (var j=0;j<15;j++){
        wins[i][j]=[];
    }
}
//count记录所有的赢法
var count=0;
//x轴所有赢法
for (var i=0;i<15;i++){
    for (var j=0;j<11;j++){
        for (var k=0;k<5;k++){
            wins[i][j+k][count]=true;
        }
        count++;
    }
}
//y轴所有赢法
for (var i=0;i<15;i++){
    for (var j=0;j<11;j++){
        for (var k=0;k<5;k++){
            wins[j+k][i][count]=true;
        }
        count++;
    }
}
//斜轴所有赢法
for (var i=0;i<11;i++){
    for (var j=0;j<11;j++){
        for (var k=0;k<5;k++){
            wins[i+k][j+k][count]=true;
        }
        count++;
    }
}
//反斜轴所有赢法
for (var i=0;i<11;i++){
    for (var j=14;j>3;j--){
        for (var k=0;k<5;k++){
            wins[i+k][j-k][count]=true;
        }
        count++;
    }
}
console.log(count);
//定义赢法统计数组
var myWin=[];
var computerWin=[];
//初始化
for (var i=0;i<count;i++){
    myWin[i]=0;
    computerWin[i]=0;
}



var chess=document.getElementById('chess');//获取canvas
var context=chess.getContext('2d');
context.strokeStyle='#bfbfbf';//棋盘线条颜色


//棋盘背景水印
var logo=new Image();
logo.src='../images/logo1.png';
logo.onload=function () {
    context.drawImage(logo,0,0,450,450);//水印样式
    chessBox();
};


//绘制棋盘
function chessBox() {
    for (var i=0;i<15;i++){
        context.moveTo(15 + i*30,15);
        context.lineTo(15 + i*30,435);
        context.stroke();
        context.moveTo(15, 15 + i*30);
        context.lineTo(435, 15 + i*30);
        context.stroke();//将图形描边
    }
}

function chessSty(i,j,me) {
    //绘制棋子
    context.beginPath();
    context.arc(15 + i*30,15 + j*30,13,0,2 * Math.PI);
    context.closePath()
    //棋子渐变效果
    var gradient=context.createRadialGradient(15 + i*30 + 2, 15 + j*30 - 2, 13, 15 + i*30 + 2, 15 + j*30 - 2, 0)
    //判断黑棋白棋
    if(me){
        gradient.addColorStop(0,"#0a0a0a")
        gradient.addColorStop(1,"#636766")
    }else {
        gradient.addColorStop(0,"#d1d1d1")
        gradient.addColorStop(1,"#f9f9f9")
    }
    context.fillStyle=gradient;//棋子颜色
    context.fill();//将图形填充
}

//下棋
chess.onclick=function (e) {
    //游戏结束
    if(over){
        return;
    }
    //如果不是我方下棋，直接return
    if(!me){
        return;
    }
    var x=e.offsetX;
    var y=e.offsetY;//获取点击坐标
    var i=Math.floor(x / 30);
    var j=Math.floor(y / 30);           //i,j是你下棋子的位置索引
    if(chessBoard[i][j]==0){          //当地址为空时可以落子
        chessSty(i,j,me);
        chessBoard[i][j]= 1;               //下黑棋
        //当某个赢法占了5个格子你赢了
        for (var k=0;k<count;k++){
            if(wins[i][j][k]){
                myWin[k]++;
                computerWin[k]=6;
                if(myWin[k] == 5){
                    window.alert("你赢了");
                    over=true;
                }
            }
        }
        if(!over){
            me = !me;
            computerAI();
        }
    }
};




function computerAI() {
    var myScore=[];//我方得分
    var computerScore=[];//电脑方得分
    var max=0;//下哪个点的最大分数
    var u=0,v=0;
    //初始化分数
    for (var i=0;i<15;i++){
        myScore[i]=[];
        computerScore[i]=[];
        for (var j=0;j<15;j++){
            myScore[i][j]=0;
            computerScore[i][j]=0;
        }
    }
//遍历整个棋盘
    for (var i=0;i<15;i++){
        for (var j=0;j<15;j++){
            if(chessBoard[i][j]==0){           //当这个格子没有落子
                for (var k=0;k<count;k++){      //遍历所有赢法
                    if(wins[i][j][k]){           //当这个赢法没有落子，落子有价值，进行加分
                        if(myWin[k]==1){
                            myScore[i][j]+=200;
                        }else if(myWin[k]==2){
                            myScore[i][j]+=400;
                        }else if(myWin[k]==3){
                            myScore[i][j]+=2000;
                        }else if(myWin[k]==4){
                            myScore[i][j]+=10000;
                        }
                        if(computerWin[k]==1){
                            computerScore[i][j]+=220;
                        }else if(computerWin[k]==2){
                            computerScore[i][j]+=440;
                        }else if(computerWin[k]==3){
                            computerScore[i][j]+=2200;
                        }else if(computerWin[k]==4){
                            computerScore[i][j]+=20000;
                        }
                    }
                }
                if(myScore[i][j] > max){
                    max=myScore[i][j];
                    u=i;
                    v=j;
                }else if(myScore[i][j] == max){
                    if(computerScore[i][j]>computerScore[u][v]){
                        u=i;
                        v=j;
                    }
                }
                if(computerScore[i][j] > max){
                    max=computerScore[i][j];
                    u=i;
                    v=j;
                }else if(computerScore[i][j] == max){
                    if(myScore[i][j]>myScore[u][v]){
                        u=i;
                        v=j;
                    }
                }

            }
        }
    }
    chessSty(u,v,false);
    chessBoard[u][v]=1;
    for (var k=0;k<count;k++){
        if(wins[u][v][k]){
            computerWin[k]++;
            myWin[k]=6;
            if(computerWin[k] == 5){
                alert("计算机赢了");
                over=true;
            }
        }
    }
    if(!over){
        me = !me;
    }

}






